package com.heziguo.sortAlgorithm;

import com.heziguo.entity.Student;
import com.heziguo.utils.SortHelper;

/**
 * 
 * @ClassName:  SelectionSort 
 * @Package com.heziguo.sortAlgorithm    
 * @Description:选择排序   （首先选择数组中最小的（或最大）数放在第一个位置上，在选择第二小的数放在第二个位置上，依此类推即可）
 * @author: 贺子国 
 * @date:   2018年6月7日 下午11:05:08   
 *     
 * @Copyright: 2018 www.heziguo.com Inc. All rights reserved. 
 * 注意：
 */
public class SelectionSort {

	public static void main(String[] args) {
		/*Integer [] arr = SortHelper.generateRandomArray(100, 0, 100);
		SelectionSort.selectintSort(arr);
		SortHelper.printArray(arr);*/
		
		/*Student[] student = {new Student("A",100),new Student("C",80),new Student("D",50),new Student("B",90)};
		SelectionSort.selectintSort(student);
		SortHelper.printArray(student);*/
		
		try {
			Integer [] arr = SortHelper.generateRandomArray(100, 0, 100);
			SortHelper.sortTime(SelectionSort.class, "selectintSort", Comparable[].class, arr);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//SortHelper.printArray(arr);
	}

	/**
	 * 
	 * @Title: selectintSort   
	 * @Description: 选择排序 
	 * @param arr void
	 * @throws
	 */
	/*public static void selectintSort(Integer[] arr){
		for (int i = 0; i < arr.length; i++) {
			//寻找[i,arr.length)内的最小值
			int minIndex = i;
			for (int j = i+1; j < arr.length; j++) {
				if (arr[j] < arr[minIndex]) {
					minIndex = j;
				}
			}
			int temp = arr[i];
			arr[i] = arr[minIndex];
			arr[minIndex] = temp;
		}
	}*/
	/**
	 * 
	 * @Title: selectintSort   
	 * @Description: 选择排序     (需要实现Comparable接口)
	 * @param arr void
	 * @throws
	 */
	public static <T extends Comparable<? super T>> void selectintSort(T[] arr){
		for (int i = 0; i < arr.length; i++) {
			//寻找[i,arr.length)内的最小值
			int minIndex = i;
			for (int j = i+1; j < arr.length; j++) {
				if (arr[j].compareTo(arr[minIndex]) > 0) {
					minIndex = j;
				}
			}
			T temp = arr[i];
			arr[i] = arr[minIndex];
			arr[minIndex] = temp;
		}
	}
}
